home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include "tk.h"
-
-
- GLenum doubleBuffer, directRender;
- GLint thing1, thing2;
-
-
- static void Init(void)
- {
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClearAccum(0.0, 0.0, 0.0, 0.0);
-
- thing1 = glGenLists(1);
- glNewList(thing1, GL_COMPILE);
- glColor3f(1.0, 0.0, 0.0);
- glRectf(-1.0, -1.0, 1.0, 0.0);
- glEndList();
-
- thing2 = glGenLists(1);
- glNewList(thing2, GL_COMPILE);
- glColor3f(0.0, 1.0, 0.0);
- glRectf(0.0, -1.0, 1.0, 1.0);
- glEndList();
- }
-
- static void Reshape(int width, int height)
- {
-
- glViewport(0, 0, (GLint)width, (GLint)height);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
-
- static GLenum Key(int key, GLenum mask)
- {
-
- switch (key) {
- case TK_ESCAPE:
- tkQuit();
- case TK_1:
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- break;
- case TK_2:
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- break;
- default:
- return GL_FALSE;
- }
- return GL_TRUE;
- }
-
- static void Draw(void)
- {
-
- glPushMatrix();
-
- glScalef(0.8, 0.8, 1.0);
-
- glClear(GL_COLOR_BUFFER_BIT);
- glCallList(thing1);
- glAccum(GL_LOAD, 0.5);
-
- glClear(GL_COLOR_BUFFER_BIT);
- glCallList(thing2);
- glAccum(GL_ACCUM, 0.5);
-
- glAccum(GL_RETURN, 1.0);
-
- glPopMatrix();
-
- glFlush();
- }
-
- static GLenum Args(int argc, char **argv)
- {
- GLint i;
-
- doubleBuffer = GL_FALSE;
- directRender = GL_TRUE;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-sb") == 0) {
- doubleBuffer = GL_FALSE;
- } else if (strcmp(argv[i], "-db") == 0) {
- doubleBuffer = GL_TRUE;
- } else if (strcmp(argv[i], "-dr") == 0) {
- directRender = GL_TRUE;
- } else if (strcmp(argv[i], "-ir") == 0) {
- directRender = GL_FALSE;
- } else {
- printf("%s (Bad option).\n", argv[i]);
- return GL_FALSE;
- }
- }
- return GL_TRUE;
- }
-
- void main(int argc, char **argv)
- {
- GLenum type;
-
- if (Args(argc, argv) == GL_FALSE) {
- tkQuit();
- }
-
- tkInitPosition(30, 60, 300, 300);
-
- type = TK_RGB | TK_ACCUM;
- type |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
- type |= (directRender) ? TK_DIRECT : TK_INDIRECT;
- tkInitDisplayMode(type);
-
- if (tkInitWindow("Accum Test") == GL_FALSE) {
- tkQuit();
- }
-
- Init();
-
- tkExposeFunc(Reshape);
- tkReshapeFunc(Reshape);
- tkKeyDownFunc(Key);
- tkDisplayFunc(Draw);
- tkExec();
- }
-